home *** CD-ROM | disk | FTP | other *** search
/ Czech Logic, Card & Gambling Games / Logické hry.iso / hry / Fish Fillets / script / puzzle / code.lua next >
Text File  |  2005-07-16  |  10KB  |  314 lines

  1.  
  2. -- -----------------------------------------------------------------
  3. -- Init
  4. -- -----------------------------------------------------------------
  5. local function prog_init()
  6.     initModels()
  7.     sound_playMusic("music/rybky10.ogg")
  8.     local pokus = getRestartCount()
  9.  
  10.  
  11.     -- -------------------------------------------------------------
  12.     local function prog_init_room()
  13.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  14.  
  15.         room.uvod = 1
  16.         room.tahy = random(500) + 500
  17.         room.opldovi = 0
  18.  
  19.         return function()
  20.             if no_dialog() and isReady(small) and isReady(big) then
  21.                 if room.uvod == 1 then
  22.                     room.uvod = 0
  23.                     switch(pokus){
  24.                         [1] = function()
  25.                             pom1 = random(2) + 1
  26.                         end,
  27.                         [2] = function()
  28.                             pom1 = random(2) + 1
  29.                         end,
  30.                         default = function()
  31.                             pom1 = random(3)
  32.                         end,
  33.                     }
  34.                     adddel(10 + random(20))
  35.                     switch(pom1){
  36.                         [1] = function()
  37.                             if random(2) == 0 then
  38.                                 addm(0, "puc-m-koukej")
  39.                             else
  40.                                 addv(0, "puc-v-podivej")
  41.                             end
  42.                         end,
  43.                         [2] = function()
  44.                             addv(0, "puc-v-videl")
  45.                             addm(10, "puc-m-oblicej")
  46.                         end,
  47.                     }
  48.                 elseif room.opldovi == 0 and dist(small, pld) < 4 and look_at(small, pld) and random(100) < 1 then
  49.                     room.opldovi = 1
  50.                     switch(random(3)){
  51.                         [0] = function()
  52.                             addm(10, "puc-m-pld0")
  53.                         end,
  54.                         [1] = function()
  55.                             addm(10, "puc-m-pld1")
  56.                         end,
  57.                         [2] = function()
  58.                             addm(10, "puc-m-hele")
  59.                         end,
  60.                     }
  61.                     addm(random(30) + 5, "puc-m-slizka")
  62.                     planSet(pld, "smutny", 60 + random(60))
  63.                     pld:planDialog(3, "puc-x-pldik")
  64.                 elseif room.tahy == 1 and big.dir ~= dir_no then
  65.                     addv(10, "puc-v-fuska"..random(2))
  66.                     room.tahy = random(500) + 500
  67.                 elseif prvni.hotovo == 1 then
  68.                     addv(5, "puc-v-fuska2")
  69.                     addm(random(10) + 3, "puc-m-stalo")
  70.                     addm(random(20) + 5, "puc-m-obraz")
  71.                     adddel(5)
  72.                     planSet(prvni, "faze", 1)
  73.                     addv(20, "puc-v-nesmysl")
  74.                     prvni.hotovo = 2
  75.                 end
  76.             end
  77.         end
  78.     end
  79.  
  80.     -- -------------------------------------------------------------
  81.     local function prog_init_prvni()
  82.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  83.  
  84.         prvni.hotovo = 0
  85.         prvni.faze = 0
  86.         local Items = {}
  87.         Items[00] = prvni
  88.         Items[01] = puzz02
  89.         Items[02] = puzz03
  90.         Items[03] = puzz04
  91.         Items[04] = puzz05
  92.         Items[05] = puzz06
  93.         Items[06] = puzz07
  94.         Items[07] = puzz08
  95.         Items[08] = puzz09
  96.         Items[09] = puzz10
  97.         Items[10] = puzz11
  98.         Items[11] = puzz12
  99.         Items[12] = puzz13
  100.         Items[13] = puzz14
  101.         Items[14] = puzz15
  102.         Items[15] = puzz16
  103.         Items[16] = puzz17
  104.         Items[17] = puzz18
  105.         Items[18] = puzz19
  106.         Items[19] = puzz20
  107.  
  108.         return function()
  109.             pomb1 = true
  110.             for pom1 = 0, 3 do
  111.                 for pom2 = 0, 4 do
  112.                     local x_real, x_ideal, y_real, y_ideal
  113.                     -- Ideal X position is (xposition in puzzle) * (width of one piece)
  114.                     x_ideal = prvni.X + pom1 * 4
  115.                     -- Index is pom1 + pom2 * (number of pieces in one row)
  116.                     x_real  = (Items[pom1 + pom2 * 4]).X
  117.                     y_ideal = prvni.Y - pom2 * 4
  118.                     y_real  = (Items[pom1 + pom2 * 4]).Y
  119.                     pomb1 = pomb1 and (x_ideal == x_real) and (y_ideal == y_real)
  120.                 end
  121.             end
  122.             if prvni.hotovo == 0 and pomb1 then
  123.                 prvni.hotovo = 1
  124.             end
  125.             for pom1 = 0, 19 do
  126.                 local puzz_item = Items[pom1]
  127.                 puzz_item.afaze = prvni.faze
  128.                 puzz_item:updateAnim()
  129.             end
  130.  
  131.             if prvni.faze > 0 and prvni.faze < 4 then
  132.                 prvni.faze = prvni.faze + 1
  133.             end
  134.         end
  135.     end
  136.  
  137.     -- -------------------------------------------------------------
  138.     local function prog_init_pld()
  139.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  140.  
  141.         pld.vlnit = 0
  142.         pld.del = 0
  143.         pld.ocko = 0
  144.         pld.smer = 0
  145.         pld.faze = 0
  146.         pld.smutny = 0
  147.  
  148.         return function()
  149.             switch(pld.dir){
  150.                 [dir_no] = function()
  151.                     if pld.vlnit == -1 then
  152.                         pld.vlnit = 8
  153.                     end
  154.                 end,
  155.                 [dir_down] = function()
  156.                     pld.vlnit = -1
  157.                 end,
  158.                 default = function()
  159.                     pld.vlnit = 8
  160.                 end,
  161.             }
  162.             if pld.vlnit > 0 then
  163.                 pld.smutny = 0
  164.             end
  165.             if pld.vlnit > 0 then
  166.                 if pld.del == 0 then
  167.                     if (pld.vlnit >= 6) and (pld.vlnit <= 8) then
  168.                         pld.del = 1
  169.                     elseif (pld.vlnit >= 3) and (pld.vlnit <= 5) then
  170.                         pld.del = 2
  171.                     else
  172.                         pld.del = 3
  173.                     end
  174.  
  175.                     if random(2) == 0 then
  176.                         pld.afaze = math.mod(pld.afaze + 1, 4)
  177.                     else
  178.                         pld.afaze = math.mod(pld.afaze + 3, 4)
  179.                     end
  180.                     pld.vlnit = pld.vlnit - 1
  181.                     if pld.vlnit == 0 then
  182.                         pld.del = 0
  183.                     end
  184.                     if pld.vlnit == 0 then
  185.                         pld.afaze = 0
  186.                     elseif pld.vlnit == 1 then
  187.                         pld.afaze = 3
  188.                     end
  189.                 else
  190.                     pld.del = pld.del - 1
  191.                 end
  192.             elseif pld.smutny > 0 then
  193.                 if pld.ocko == 0 then
  194.                     if random(100) < 10 then
  195.                         pld.ocko = 3
  196.                     end
  197.                 end
  198.                 if pld.ocko > 0 then
  199.                     pld.ocko = pld.ocko - 1
  200.                 end
  201.                 if pld.ocko > 0 then
  202.                     pld.afaze = 15
  203.                 else
  204.                     pld.afaze = 14
  205.                 end
  206.                 pld.smutny = pld.smutny - 1
  207.             else
  208.                 if random(100) < 10 then
  209.                     pld.smer = 1 - pld.smer
  210.                 end
  211.                 if (pld.faze == 0) then
  212.                     pld.afaze = 0
  213.                     if random(100) < 10 then
  214.                         pld.faze = 1
  215.                     end
  216.                 elseif (pld.faze == 1) or (pld.faze == 4) then
  217.                     pld.faze = pld.faze + 1
  218.                     pld.afaze = 4
  219.                 elseif (pld.faze == 2) or (pld.faze == 3) then
  220.                     pld.faze = pld.faze + 1
  221.                     pld.afaze = 5
  222.                 elseif (pld.faze == 5) then
  223.                     pld.afaze = 0
  224.                     pld.faze = 0
  225.                 end
  226.  
  227.                 switch(pld.afaze){
  228.                     [0] = function()
  229.                         if pld.smer == 1 then
  230.                             pld.afaze = 6
  231.                         end
  232.                     end,
  233.                     [4] = function()
  234.                         if pld.smer == 1 then
  235.                             pld.afaze = 7
  236.                         end
  237.                     end,
  238.                 }
  239.                 if pld.ocko == 0 then
  240.                     if random(100) < 10 then
  241.                         pld.ocko = 3
  242.                     end
  243.                 end
  244.                 if pld.ocko > 0 then
  245.                     pld.ocko = pld.ocko - 1
  246.                 end
  247.                 if pld.ocko > 0 then
  248.                     if pld.afaze == 0 then
  249.                         pld.afaze = 9
  250.                     else
  251.                         pld.afaze = pld.afaze + 6
  252.                     end
  253.                 end
  254.             end
  255.             pld:updateAnim()
  256.         end
  257.     end
  258.  
  259.     -- -------------------------------------------------------------
  260.     local function prog_init_small()
  261.         return function()
  262.             if room.tahy > 1 and small.dir ~= dir_no and level_isNewRound() then
  263.                 room.tahy = room.tahy - 1
  264.             end
  265.         end
  266.     end
  267.  
  268.     -- -------------------------------------------------------------
  269.     local function prog_init_big()
  270.         return function()
  271.             if room.tahy > 1 and big.dir ~= dir_no and level_isNewRound() then
  272.                 room.tahy = room.tahy - 1
  273.             end
  274.         end
  275.     end
  276.  
  277.     -- --------------------
  278.     local update_table = {}
  279.     local subinit
  280.     subinit = prog_init_room()
  281.     if subinit then
  282.         table.insert(update_table, subinit)
  283.     end
  284.     subinit = prog_init_prvni()
  285.     if subinit then
  286.         table.insert(update_table, subinit)
  287.     end
  288.     subinit = prog_init_pld()
  289.     if subinit then
  290.         table.insert(update_table, subinit)
  291.     end
  292.     subinit = prog_init_small()
  293.     if subinit then
  294.         table.insert(update_table, subinit)
  295.     end
  296.     subinit = prog_init_big()
  297.     if subinit then
  298.         table.insert(update_table, subinit)
  299.     end
  300.     return update_table
  301. end
  302. local update_table = prog_init()
  303.  
  304.  
  305. -- -----------------------------------------------------------------
  306. -- Update
  307. -- -----------------------------------------------------------------
  308. function prog_update()
  309.     for key, subupdate in pairs(update_table) do
  310.         subupdate()
  311.     end
  312. end
  313.  
  314.